import qmt_tool.pydfile.redis_tool  as pyd_redis

class RedisQueue():
    def __init__(self):
        self.redis=pyd_redis.RedisQueue()

    def write_pd_2redis(self,keykey,pd_data):
        self.redis.write_pd_2redis(keykey,pd_data)
        return True

    def set_pd_NULL(self,keykey):
        self.redis.set_pd_NULL(keykey)
        return True

    def write_pd_2redis_with_ttl(self, keykey, pd_data, nx=True, ex=1200):
        self.redis.write_pd_2redis_with_ttl( keykey, pd_data, nx=nx, ex=ex)
        return True

    def add_pd_2redis(self,keykey,pd_data):
        self.redis.add_pd_2redis(keykey,pd_data)
        return True
    def read_redis_2pd(self,keykey):
        data_pd=self.redis.read_redis_2pd(keykey)
        return data_pd

    def write_pd_2queue(self,keykey,pd_data):

        rlt=self.redis.write_pd_2queue(keykey,pd_data)
        return rlt

    def read_and_pop_queue_2pd(self,keykey,count=10):
        data_pd = self.redis.read_and_pop_queue_2pd(keykey, count)
        return data_pd

    def get_dict(self,keykey):
        jsonda=self.redis.get_json_2dict(keykey)
        return jsonda
   ###################################################      字符串方法       ###################################################
    #加入缓存,存在会替换
    def addStr(self, keykey,values): #value可以为复杂的json
        rlt=self.redis.addStr(keykey,values)
        return rlt

    def setStr_with_ttl(self,keykey,values,nx=True,ex=60):  # value可以为复杂的json

        rlt=self.redis.setStr_with_ttl(keykey,values,nx=nx,ex=ex)
        return rlt
    # 不存在则加入,否则不变
    def addStrNX(self,keykey,values):  # value可以为复杂的json
        return self.redis.addStrNX(keykey,values)

    # 加入缓存,存在会替换,并加入过期时间
    def addStrEX(self,keykey,time,  values):  # value可以为复杂的json
        return self.redis.addStrEX(keykey,time,  values)

    #获取缓存
    def getStr(self,keykey):
        return self.redis.getStr(keykey)



    #对value增值+count
    def incrNum(self,numkey,values=1):
        return self.incrNum(numkey,values)

    # 对value减值-count
    def decrNum(self,keykey,values=1):
        return self.redis.decrNum(keykey,values)

    ######################      列表方法       ###################################################
    # 返回队列里面list元素的长度
    def listLen(self,listkey):

        return self.redis.listLen(listkey)

    # 添加新元素到队列的最右方,也就是列表的最后面
    def add2right(self,listkey, *values):

        self.redis.add2right(listkey, *values) #rpush 如何没有列表会创建 rpushx不创建

    # 返回并删除队列里的第一个元素,如果队列为空返回的None
    def getAndPopFirst(self,listkey):

        item = self.redis.getAndPopFirst(listkey)
        return item

    # 获取列表对应索引的值
    def getItemIndex(self,listkey,index):
        indexValue =self.redis.getItemIndex(listkey,index)
        return indexValue

    #获取列表所有元素
    def getAllListItem(self,listkey): # 获取list所有元素 无key会返回[]
        allItemList=self.redis.getAllListItem(listkey)
        return allItemList

    # 获取列表start-end的元素,切头切尾
    def getListItem(self,listkey,start,end):
        itemList = self.redis.getListItem(listkey,start,end)
        return itemList

    #删除列表中value
    def delValue(self,keykey,value):
        self.redis.delValue(keykey,value)

    # 删除列表中指定数量的value
    def delMoreValue(self,listkey,count, value):#count为0表示删除所有值为value的元素
        self.redis.delMoreValue(listkey,count, value)

    # 获取并只保留start-end的元素,切头切尾
    def saveStart2end(self,listkey, start, end):
        start2endList = self.redis.saveStart2end(listkey,start,end)
        return start2endList

    #批量获取删除
    def batchGetAndPop(self,keykey,n): #n>=1, 返回格式[['value'], True]
        data=self.redis.batchGetAndPop(keykey,n)
        return data

    ###################################################      集合方法       ###################################################
    #加入集合中
    def add2set(self,keykey,values):
       self.redis.add2set(keykey,values)
    #查看元素是否存在集合中
    def memberExist(self,keykey,member):

       check=self.redis.memberExist(keykey,member)
       return check

    def getset_value(self,keykey):
        rlt=self.redis.getset_value(keykey)
        return rlt



    ###################################################      通用方法       ###################################################
    # 查看过期时间
    def checkExpireTime(self,keykey):

        item =self.redis.checkExpireTime(keykey)
        return item

    # 设置过期时间
    def setExpireTime(self,keykey,time):
        item = self.redis.setExpireTime(keykey,time)
        return item


if __name__ == '__main__':
    mmredis=RedisQueue()
    # df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
    #
    # mmredis.write_pd_2redis(keykey="这是测试",pd_data=df)
    #
    # zheshijieguo=mmredis.read_redis_2pd(keykey="数据持股pd")
    result=mmredis.read_and_pop_queue_2pd("待买入股票pd")
    print(result)
